package edu.unice.simul.modele.contenus.immobiles;

import java.util.ArrayList;
import java.util.List;

import edu.unice.simul.util.Dim;

/**
 * La classe Mur modélise les limites dans lesquelles se meuvent les mobiles.
 * 
 * Ils ont comme caractéristiques principales de ne pas être traversés par les
 * mobiles
 * 
 * @author Romain Ciaccafava
 */
public class Mur extends Immobile {

	public Mur(Dim pos) {
		super(pos);
	}

	/**
	 * Fonctionn statique qui crée une bordure de murs autour de la pièce.
	 * 
	 * Cette fonction est notamment utilisée lors des tests.
	 * 
	 * @param dimensionsDeLaPiece
	 *          Dimensions de la pièce
	 * @param reserve
	 *          Liste contenant les positions des cases dans lesquelles il ne faut
	 *          pas mettre un mur (pour y mettre une sortie par exemple)
	 * @return La liste des murs créés
	 */
	public static List<Mur> borduDeLaPiece(Dim dimensionsDeLaPiece,
			List<Dim> reserve) {
		List<Mur> murs = new ArrayList<Mur>();

		int x = 0, y = 0;

		// Création du mur du haut
		for (x = 0; x < dimensionsDeLaPiece.getX(); x++) {
			boolean murReserve = false;
			for (Dim dim : reserve)
				if (dim.getX() == x && dim.getY() == y)
					murReserve = true;

			if (!murReserve)
				murs.add(new Mur(new Dim(x, y)));
		}

		// Création du mur du bas
		y = dimensionsDeLaPiece.getY() - 1;
		for (x = 0; x < dimensionsDeLaPiece.getX(); x++) {
			boolean murReserve = false;
			for (Dim dim : reserve)
				if (dim.getX() == x && dim.getY() == y)
					murReserve = true;

			if (!murReserve)
				murs.add(new Mur(new Dim(x, y)));
		}

		// Création du mur de gauche
		x = 0;
		for (y = 1; y < dimensionsDeLaPiece.getY() - 1; y++) {
			boolean murReserve = false;
			for (Dim dim : reserve)
				if (dim.getX() == x && dim.getY() == y)
					murReserve = true;

			if (!murReserve)
				murs.add(new Mur(new Dim(x, y)));
		}

		// Création du mur de droits
		x = dimensionsDeLaPiece.getX() - 1;
		for (y = 1; y < dimensionsDeLaPiece.getY() - 1; y++) {
			boolean murReserve = false;
			for (Dim dim : reserve)
				if (dim.getX() == x && dim.getY() == y)
					murReserve = true;

			if (!murReserve)
				murs.add(new Mur(new Dim(x, y)));
		}

		return murs;
	}
}
